package projecto.pkgfinal;

import java.util.Scanner;
import java.util.ArrayList;
public class Ui {
    
    Consultorio consultorio;
    
    public boolean login()
    {
     Scanner in = new Scanner(System.in);
     String username="",senha="";
     if(consultorio.dbPessoas.existePessoasParaLogin()){
         menuHeader();
         System.out.print("Username: ");
         username=in.nextLine();
         System.out.print("Senha: ");
         senha=in.nextLine();
      }else{
         //Caso não existam utilizadores
        return true; 
      }
       return consultorio.dbPessoas.verificarLogin(username,senha);
    } 
    public void menuHeader()
    {
     System.out.println("========================================================");
     System.out.println("|                 Consultório CFW  v0.1                |");
     System.out.println("========================================================");
    }
    public void menuFooter()
    {
     System.out.println("========================================================");
     System.out.println("|          by Coutinho, Fonseca e Walter - 2012        |");
     System.out.println("========================================================");
    }
    public void menuOpcoesComuns(String opcaoTitulo)
    {
        System.out.println("                  "+opcaoTitulo+"");
        System.out.println("|                 1 - Criar                            |");
        System.out.println("|                 2 - Listar                           |");
        System.out.println("|                 3 - Pesquisar                        |");
        System.out.println("|                 4 - Actualizar                       |");
        System.out.println("|                 5 - Apagar                           |");
        System.out.println("|                 0 - Voltar atrás                     |");
        menuFooter();
    } 
    public void menuPrincipalMedico(){
    menuHeader();
        System.out.println("|                 Consultas                            |");
        System.out.println("|                 1 - Criar                            |");
        System.out.println("|                 2 - Listar                           |");
        System.out.println("|                 3 - Pesquisar                        |");
        System.out.println("|                 4 - Actualizar                       |");
        System.out.println("|                 5 - Apagar                           |");
        System.out.println("|                 0 - Gravar e sair                    |");
        menuFooter();
        
        int opcao;
        
        
        System.out.println("Escolha opção desejada");
        System.out.print(">");
        opcao = Input.in.nextInt();
        
        switch (opcao){
            case 1:criarConsultaMedico();break;
            case 2:listarConsultasMedico();break;
            case 3:pesquisarConsulta();break;
            case 4:editarConsultas(Pessoa.TIPOMEDICO[0]);break;
            case 5:apagarConsultaPorId(Operador.id);break;
            case 0:
                consultorio.dbPessoas.gravarPessoasBIN();
                consultorio.dbEspecialidades.gravarEspecialidades();
                consultorio.dbConsultas.gravarConsultas();
                menuCreditos();
                
                System.exit(0);
            break;
        }
        menuPrincipalMedico();
    }
    public void menuPrincipal(){
        menuHeader();
        System.out.println("|                 Menu Principal                       |");
        System.out.println("|                 1 - Administrativos                  |");
        System.out.println("|                 2 - Médicos                          |");
        System.out.println("|                 3 - Utentes                          |");
        System.out.println("|                 4 - Consultas                        |");
        System.out.println("|                 5 - Especialidades                   |");
        System.out.println("|                 6 - Consultório                      |");
        System.out.println("|                 0 - Gravar e sair                    |");
        menuFooter();
        
        int opcao;
        
        
        System.out.println("Escolha opção desejada");
        System.out.print(">");
        opcao = Input.in.nextInt();
        
        switch (opcao){
            case 1:menuAdministrativos();break;
            case 2:menuMedicos();break;
            case 3:menuUtentes();break;
            case 4:menuConsultas();break;
            case 5:menuEspecialidade();break;
            case 6:menuConsultorio();break;
            case 0:
                consultorio.dbPessoas.gravarPessoasBIN();
                consultorio.dbEspecialidades.gravarEspecialidades();
                consultorio.dbConsultas.gravarConsultas();
                menuCreditos();
                System.exit(0);
            break;
        }
        menuPrincipal();
    }
    public void menuAdministrativos(){
       
        menuHeader();
        menuOpcoesComuns("Administrativos");
        int opcao;
        
        System.out.println("Escolha opção desejada");
        System.out.print(">");
        opcao = Input.in.nextInt();
        
        switch (opcao){
            case 1:formularioDadosPessoais(Pessoa.TIPOADMINISTRATIVO[0]);break;
            case 2:listarPessoas(Pessoa.TIPOADMINISTRATIVO[0]);break;
            case 3:pesquisarPessoaPorId(Pessoa.TIPOADMINISTRATIVO[0],Pessoa.TIPOADMINISTRATIVO[1]);break;
            case 4:editarPessoaPorId(Pessoa.TIPOADMINISTRATIVO[0],Pessoa.TIPOADMINISTRATIVO[1]);break;
            case 5:apagarPessoaPorId(Pessoa.TIPOADMINISTRATIVO[0],Pessoa.TIPOADMINISTRATIVO[1]);break;
            case 0:menuPrincipal();break;
        }
        menuAdministrativos();
    }

    
    public void menuEspecialidade(){ 
        menuHeader();
        menuOpcoesComuns("Especialidade");
        int opcao;
        
        System.out.println("Escolha opção desejada");
        System.out.print(">");
        opcao = Input.in.nextInt();
        
        switch (opcao){
            case 1:formularioCriarEspecialidade();break;
            case 2:listarEspecialidades();break;
            case 3:pesquisarEspecialidadePorId();break;
            case 4:editarEspecialidadePorId();break;
            case 5:apagarEspecialidadePorId();break;
            case 0:menuPrincipal();break;
        }
        menuEspecialidade();
    }
  
    
    public void menuConsultorio(){
         menuHeader();
        System.out.println("|                     Consultório                      |");
        System.out.println("|                 1 - Listar todas as pessoas          |");
        System.out.println("|                 2 - Pesquisar pessoa                 |");
        System.out.println("|                 3 - Actualizar pessoa                |");
        System.out.println("|                 4 - Apagar pessoa                    |");
        System.out.println("|                 0 - Voltar atrás                     |");
        System.out.println("========================================================");
        
        int opcao;
        
        
        System.out.println("Escolha opção desejada");
        System.out.print(">");
        opcao = Input.in.nextInt();
        
        switch (opcao){
            case 1:listarPessoas();break;
            case 2:pesquisarPessoaPorId();break;
            case 3:editarPessoaPorId();break;
            case 4:apagarPessoaPorId();break;
            case 0:menuPrincipal();break;
        }
        menuConsultorio();
    }
    public void menuMedicos(){
        menuHeader();
        menuOpcoesComuns("Médicos");
        int opcao;
        
        System.out.println("Escolha opção desejada");
        System.out.print(">");
        opcao = Input.in.nextInt();
        
        switch (opcao){
            //case 1:ListaMedicos.CriaMedico(db);break;
            case 1:formularioDadosPessoais(Pessoa.TIPOMEDICO[0]);break;
            case 2:menuListarMedicos();break;
            case 3:pesquisarPessoaPorId(Pessoa.TIPOMEDICO[0],Pessoa.TIPOMEDICO[1]);break;
            case 4:editarPessoaPorId(Pessoa.TIPOMEDICO[0],Pessoa.TIPOMEDICO[1]);break;
            case 5:apagarPessoaPorId(Pessoa.TIPOMEDICO[0],Pessoa.TIPOMEDICO[1]);break;
            case 0:menuPrincipal();break;
        }
        menuMedicos();
    }
    public void menuListarMedicos(){
        menuHeader();
        System.out.println("                  Médicos");
        System.out.println("|                 1 - Por Id                           |");
        System.out.println("|                 2 - Por Especialidade                |");
        menuFooter();
        int opcao;
        
        System.out.println("Escolha opção desejada");
        System.out.print(">");
        opcao = Input.in.nextInt();
        
        switch (opcao){
            //case 1:ListaMedicos.CriaMedico(db);break;
            case 1:pesquisarPessoaPorId(Pessoa.TIPOMEDICO[0],Pessoa.TIPOMEDICO[1]);break;
            case 2:listarMedicosPorEspecialidade();break;
            case 0:menuPrincipal();break;
        }
        menuMedicos();
    }
    
    public void menuUtentes(){
        menuHeader();
        menuOpcoesComuns("Utentes");
        int opcao;
        
        
        System.out.println("Escolha opção desejada");
        System.out.print(">");
        opcao = Input.in.nextInt();
        
        switch (opcao){
            case 1:formularioDadosPessoais(Pessoa.TIPOUTENTE[0]);break;
            case 2:listarPessoas(Pessoa.TIPOUTENTE[0]);break;
            case 3:pesquisarPessoaPorId(Pessoa.TIPOUTENTE[0],Pessoa.TIPOUTENTE[1]);break;
            case 4:editarPessoaPorId(Pessoa.TIPOUTENTE[0],Pessoa.TIPOUTENTE[1]);break;
            case 5:apagarPessoaPorId(Pessoa.TIPOUTENTE[0],Pessoa.TIPOUTENTE[1]);break;
            case 0:menuPrincipal();break;
        }
        menuUtentes();
    }
     public void menuConsultas(){
        menuHeader();
        menuOpcoesComuns("Consultas");
        int opcao;
        
        
        System.out.println("Escolha opção desejada");
        System.out.print(">");
        opcao = Input.in.nextInt();
        
        switch (opcao){
            case 1:criarConsultaAdministrativo();break;
            case 2:listarConsultas();break;
            case 3:pesquisarConsulta();break;
            case 4:editarConsultas(Pessoa.TIPOADMINISTRATIVO[0]);break;
            case 5:apagarConsultaPorId();break;
            case 0:menuPrincipal();break;
        }
        menuConsultas();
    }
     
     public void editarConsultas(String tipo){
     String especialidade,medico,dia,mes,ano,hora,opcao,dataconsulta;
        double custo;
        int utente;
        Utente utenteaux;
       Medico medicoaux;
       Especialidade especialidadeaux;
       StringBuilder data = new StringBuilder();
       
        
         Scanner inInt = new Scanner(System.in); 
         Scanner in = new Scanner(System.in); 
         
         
        int consultasId;
         if (tipo.equals(Pessoa.TIPOADMINISTRATIVO[0])){
         
        
        System.out.print("Editar consultas\n" );
        consultorio.dbConsultas.listarConsultas();
        do{
            System.out.print("Id da consulta a editar (0 para sair): ");
            consultasId=inInt.nextInt();
        }while(!consultorio.dbConsultas.existeConsulta(consultasId, consultasId)&& consultasId==0);
        
        
        
       
    medico=consultorio.dbConsultas.getMedico(consultasId);
        System.out.println("Medico: "+medico);
        
        System.out.println("lista de medicos disponivel: ");
        consultorio.dbPessoas.listarNomePessoasComId(Pessoa.TIPOMEDICO[0]);
        boolean flag=false;
       do{ 
         
           System.out.println("Introduza o id do novo medico (0 para manter): "); 
        opcao=in.nextLine();
        if(!opcao.equals("0"))
        {
             if (consultorio.dbPessoas.existePessoa(Integer.valueOf(Pessoa.TIPOMEDICO[0]),Integer.valueOf(opcao)))    
                {   medico=opcao;
                    flag = true;
                }
        }
       }while (!flag);
      medicoaux = (Medico)consultorio.dbPessoas.getPessoa(Integer.valueOf(medico));
        
         //mostrar a especialidade da consulta que vai alterar
        especialidade=consultorio.dbConsultas.getEspecialidade(consultasId);     
        System.out.println("Nome: "+especialidade);
        System.out.println("especialidades disponiveis: ");
        boolean flag2 = false;
        consultorio.dbPessoas.getEspecialidades(Integer.valueOf(medico));
        do { 
            
       
            System.out.println("Introduza a nova especialidade (0 para manter): ");
         
        opcao=in.nextLine();
        if(!opcao.equals("0"))
            if (consultorio.dbEspecialidades.existeEspecialidade(Integer.valueOf(opcao)))            
            { especialidade=opcao;
                    flag2 = true;
            }
        }while(!flag2);
        
        especialidadeaux = (Especialidade)consultorio.dbEspecialidades.getEspecialidade(Integer.valueOf(especialidade));
       
        utente = consultorio.dbConsultas.getUtente(consultasId);
        System.out.println("utente; "+utente);
        consultorio.dbPessoas.listarNomePessoasComId(Pessoa.TIPOUTENTE[0]);
        System.out.println("Introduza o id do utente (0 para manter): "); 
        opcao=in.nextLine();
        if(!opcao.equals("0"))
                    utente=Integer.valueOf(opcao);
        utenteaux = (Utente)consultorio.dbPessoas.getPessoa(Integer.valueOf(utente));
        
       
        
     }
     
         else {        
             System.out.println("Es um medico apenas alteras as datas!");
             System.out.println("as suas consultas sao: ");
             consultorio.dbConsultas.listarConsulta(Integer.valueOf(Pessoa.TIPOMEDICO[0]),Integer.valueOf(Operador.id));
             System.out.println("escolha o id da consulta a alterar");
              consultasId=inInt.nextInt();
              utente = consultorio.dbConsultas.getUtente(consultasId);
              utenteaux = (Utente)consultorio.dbPessoas.getPessoa(Integer.valueOf(utente));          
              medicoaux = (Medico)consultorio.dbPessoas.getPessoa(Operador.id);
             especialidadeaux = (Especialidade)consultorio.dbEspecialidades.getEspecialidade(consultorio.dbConsultas.getEspecialidadeId(consultasId));
         }
         dataconsulta=consultorio.dbConsultas.getData(consultasId);      
       dia = dataconsulta.substring(1,2);
       mes = dataconsulta.substring(4,5);
       ano = dataconsulta.substring(7,10);
       
         
         
        System.out.println("data "+dataconsulta);
        System.out.println("Introduza o dia (0 para manter): "); 
        opcao=in.nextLine();
        if(!opcao.equals("0"))
                    dia=opcao;
        System.out.println("Introduza o mes (0 para manter): "); 
        opcao=in.nextLine();
        if(!opcao.equals("0"))
                    mes=opcao;
        System.out.println("Introduza o ano (0 para manter): "); 
        opcao=in.nextLine();
        if(!opcao.equals("0"))
                    ano=opcao;
        
     
     data.append(dia+"/");
     data.append(mes+"/");
     data.append(ano);
     
        hora=consultorio.dbConsultas.getHora(consultasId);     
        System.out.println("hora: "+hora);
       //TODO horas disponiveis para marcar consultas
        
        System.out.println("Introduza o hora (0 para manter): "); 
        opcao=in.nextLine();
        if(!opcao.equals("0"))
                    hora=opcao;
        custo=consultorio.dbConsultas.getCusto(consultasId);
        System.out.println("Introduza o custo (0 para manter): "); 
        opcao=in.nextLine();
        if(!opcao.equals("0"))
                    custo=Double.valueOf(opcao);
       
        
      consultorio.dbConsultas.actualizarConsulta(consultasId, utenteaux, medicoaux, especialidadeaux,String.valueOf(data), hora, custo);
         
     }
     
    public void criarConsultaAdministrativo(){
     Scanner in = new Scanner(System.in);
     String medico;
     String dia,mes,ano,custo,hora,utente,especialidade;
    if(consultorio.dbPessoas.existeTipoPessoa(Pessoa.TIPOUTENTE[0])){
     //Verificação se existem médicos
         if(consultorio.dbPessoas.existeTipoPessoa(Pessoa.TIPOMEDICO[0])){
             consultorio.dbPessoas.listarNomePessoa(Pessoa.TIPOMEDICO[0]);
             do{
                System.out.println("Digite o ID do médico:");
                medico = in.nextLine();
             }while(!consultorio.dbPessoas.existePessoa(Integer.valueOf(Pessoa.TIPOMEDICO[0]),Integer.valueOf(medico)));
             //Verificação se existem especialidades
             if(consultorio.dbEspecialidades.existemEspecialidades()){
                 //TODO: COUTINHO: Mostrar apenas as especialidades do médico escolhido
                 consultorio.dbEspecialidades.listarEspecialidades();

                 do{
                     System.out.println("Digite o ID da especialidade");
                     especialidade = in.nextLine();
                     //TODO: COUTINHO: Confirmar que escolheu um ID válido para o médico em questão
                 }while(!consultorio.dbEspecialidades.existeEspecialidade(Integer.valueOf(especialidade)));
                        consultorio.dbPessoas.listarNomePessoasComId(Pessoa.TIPOUTENTE[0]);
                     do{
                         System.out.println("Qual é o ID do utente:");
                         utente = in.nextLine();
                     }while(!consultorio.dbPessoas.existePessoa(Integer.valueOf(Pessoa.TIPOUTENTE[0]),Integer.valueOf(utente)));
                     //TODO: COUTINHO: Verificar se não existe nenhuma consulta para esse dia/medico/utente e só depois efectivar a marcação.
                     System.out.println("escolha o dia");
                     dia = in.nextLine();
                     System.out.println("escolha o mês");
                     mes = in.nextLine();
                     System.out.println("escolha o ano");
                     ano = in.nextLine();
                     System.out.println("escolha o hora");
                     hora = in.nextLine();
                     System.out.println("escolha o custo");
                     custo = in.nextLine();

       
                     //Cast para enviar o tipo de objectos necessário
//TODO verificar se ja existe consulta marcada para esse medico
                  
                 if  (  consultorio.dbConsultas.criarConsulta(
                                (Utente)consultorio.dbPessoas.getPessoa(Integer.valueOf(utente)),
                                (Medico)consultorio.dbPessoas.getPessoa(Integer.valueOf(medico)),
                                consultorio.dbEspecialidades.getEspecialidade(Integer.valueOf(especialidade)),
                                dia,mes,ano, hora, custo))
              System.out.println("O utente "+ consultorio.dbPessoas.getNomeProprio(Integer.valueOf(utente)) +" "+consultorio.dbPessoas.getApelido(Integer.valueOf(utente))+" ficou com a consulta marcada para especialidade "+consultorio.dbEspecialidades.getEspecialidadeNome(Integer.valueOf(especialidade))+" no dia "+dia+" às "+hora+" com o Médico "+consultorio.dbPessoas.getNomeProprio(Integer.valueOf(medico)) +" "+consultorio.dbPessoas.getApelido(Integer.valueOf(medico))+".");

             }else{
                System.out.println("Não pode marcar consulta porque não existem especialidades criadas.");
             }
         }else{
             System.out.println("Não pode marcar consulta porque não existem médicos.");
         }
     }else{
        System.out.println("Não pode marcar consulta porque não existem utentes criados.");
     }
     
     }
    public void criarConsultaMedico(){
     Scanner in = new Scanner(System.in);
     String dia,mes,ano,custo,hora,utente,especialidade;
     //Verificação se existem médicos
         if(consultorio.dbEspecialidades.existemEspecialidades()){
             //TODO: COUTINHO: Listar somente as especialidades do médico que está a usar o sistema
             consultorio.dbEspecialidades.listarEspecialidades();
             do{
                 System.out.println("Digite o ID da especialidade");
                 especialidade = in.nextLine();
             }while(!consultorio.dbEspecialidades.existeEspecialidade(Integer.valueOf(especialidade)));
             
             if(consultorio.dbPessoas.existeTipoPessoa(Pessoa.TIPOUTENTE[0])){
                 consultorio.dbPessoas.listarNomePessoasComId(Pessoa.TIPOUTENTE[0]);
                 do{
                     System.out.println("Qual é o ID do utente:");
                     utente = in.nextLine();
                 }while(!consultorio.dbPessoas.existePessoa(Integer.valueOf(Pessoa.TIPOUTENTE[0]),Integer.valueOf(utente)));
                 //TODO: COUTINHO:  Verificar se não existe nenhuma consulta para esse dia/medico/utente e só depois efectivar a marcação.
                 System.out.println("escolha o dia");
                 dia = in.nextLine();
                 System.out.println("escolha o mês");
                 mes = in.nextLine();
                 System.out.println("escolha o ano");
                 ano = in.nextLine();
                 System.out.println("escolha o hora");
                 hora = in.nextLine();
                 System.out.println("escolha o custo");
                 custo = in.nextLine();
                
                 System.out.println("consulta marcada:");
                 System.out.println("dia: "+ dia);
                 System.out.println("hora: "+ hora);
                 System.out.println("Especialidade: "+ consultorio.dbEspecialidades.getEspecialidadeNome(Integer.valueOf(especialidade)));
                 System.out.println("Medico:"+ consultorio.dbPessoas.getNomeProprio(Operador.id) +" "+consultorio.dbPessoas.getApelido(Operador.id));
                 System.out.println("Utente"+ consultorio.dbPessoas.getNomeProprio(Integer.valueOf(utente)) +" "+consultorio.dbPessoas.getApelido(Integer.valueOf(utente)));
                 //Cast para enviar o tipo de objectos necessário
                 consultorio.dbConsultas.criarConsulta(
                            (Utente)consultorio.dbPessoas.getPessoa(Integer.valueOf(utente)),
                            (Medico)consultorio.dbPessoas.getPessoa(Operador.id),
                            consultorio.dbEspecialidades.getEspecialidade(Integer.valueOf(especialidade)),
                            dia,mes,ano, hora, custo);
             }else{
                System.out.println("Não pode marcar consulta porque não existem utentes criados.");
             }
         }else{
            System.out.println("Não pode marcar consulta porque não existem especialidades criadas.");
         }
     }
     public void formularioDadosPessoais(String perfil){
        
        String nomeProprio;
        String apelido;
        char genero;
        String bi;
        String nif;
        String nss;
        boolean continuar=true;
        if(perfil.equals(Pessoa.TIPOMEDICO[0])){
            if(!consultorio.dbEspecialidades.existemEspecialidades()){
                continuar=false;
                System.out.println("Não pode criar um médico se não existir especialidadades, crie uma.");
            }
        }
        if(continuar){   
            Scanner in = new Scanner(System.in);

            System.out.println("=== Dados Pessoais ===");
            System.out.print("Nome: ");
            nomeProprio=in.nextLine();
            System.out.print("Apelido: ");
            apelido=in.nextLine();
            System.out.print("Genero: ");
            String texto=in.nextLine();
            genero = texto.charAt(0);
            System.out.print("Bilhete de Identidade: ");
            bi=in.nextLine();
            System.out.print("Número Contribuinte: ");
            nif=in.nextLine();
            System.out.print("Número Social: ");
            nss=in.nextLine();

            System.out.println("=== Moradas ===");               
            ArrayList<Morada> moradas = new ArrayList<Morada>();
            String rua;
            String porta="";
            String opcao="";
            String codigoPostal;
            String localidade;

            do{ 
            System.out.print("Número da Porta (0 para sair): ");
            opcao = in.nextLine();
            if(!opcao.equals("0")){
                porta = opcao;
                System.out.print("Rua: ");
                rua = in.nextLine();
                System.out.print("Código Postal: ");
                codigoPostal = in.nextLine();
                System.out.print("Localidade: ");
                localidade = in.nextLine();
                Morada morada = new Morada(rua,Short.valueOf(porta),codigoPostal,localidade);
                moradas.add(morada);
            }
            }while(!opcao.equals("0"));


            System.out.println("=== Contactos ===");       
            ArrayList<Telefone> telefones = new ArrayList<Telefone>();
            String indicativoPais; 
            String indicativoDistrito; 
            String numero;
            String numeroCedula;
            do{
            String numeroCompleto=""; 
            System.out.print("Indicativo Pais (0 para sair): ");
            opcao = in.nextLine();
            if(!opcao.equals("0")){
                indicativoPais = opcao;
                numeroCompleto=numeroCompleto+indicativoPais;
                System.out.print("Indicativo Distrito: ");
                indicativoDistrito = in.nextLine();
                numeroCompleto=numeroCompleto+indicativoDistrito;
                System.out.print("Numero: ");
                numero = in.nextLine();
                numeroCompleto=numeroCompleto+numero;
                Telefone telefone = new Telefone(Short.valueOf(indicativoPais) ,Short.valueOf(indicativoDistrito),Integer.valueOf(numero));
                telefones.add(telefone);
            }
            }while(!opcao.equals("0"));
            if(perfil.equals(Pessoa.TIPOMEDICO[0])){

                System.out.print("Número da Cédula:");
                numeroCedula=in.nextLine();
                //Especialidades
                ArrayList<Especialidade> especialidades = new ArrayList<Especialidade>();
                especialidades=formularioEspecialidades();
                //Dados de Acesso
                ArrayList<String> dados = new ArrayList<String>();
                dados=formularioAcessos();

                consultorio.dbPessoas.criarMedico(numeroCedula,especialidades,dados.get(0),dados.get(1), nomeProprio, Integer.valueOf(perfil), apelido, genero, telefones, moradas, bi, nif, nss);
            }else if(perfil.equals(Pessoa.TIPOADMINISTRATIVO[0])){
                //Dados de Acesso
                ArrayList<String> dados = new ArrayList<String>();
                dados=formularioAcessos();
                consultorio.dbPessoas.criarAdministrativo(dados.get(0),dados.get(1),nomeProprio, Integer.valueOf(perfil), apelido, genero, telefones, moradas, bi, nif, nss);
            }else{
                String sistemaSaude=formularioSistemaSaude();
                consultorio.dbPessoas.criarUtente(sistemaSaude,nomeProprio, Integer.valueOf(perfil), apelido, genero, telefones, moradas, bi, nif, nss);
            }
        }
     }
     public ArrayList formularioEspecialidades(){
        System.out.println("=== Especialidades ===");       
        ArrayList<Especialidade> especialidades = new ArrayList<Especialidade>();
        String codigo; 
        String opcao; 
        boolean flag=false;
        Scanner in = new Scanner(System.in);
        do{
            consultorio.dbEspecialidades.listarEspecialidades();
            System.out.print("Código (0 para sair):");
            opcao = in.nextLine();
            if(!opcao.equals("0")){
                codigo=opcao;
                
                if(consultorio.dbEspecialidades.existeEspecialidade(Integer.valueOf(opcao))){
                    Especialidade especialidade = new Especialidade(consultorio.dbEspecialidades.getEspecialidadeNome(Integer.valueOf(opcao)), Integer.valueOf(codigo), consultorio.dbEspecialidades.getEspecialidadeDescricao(Integer.valueOf(opcao)));
                    especialidades.add(especialidade);
                    flag=true;
                }else{
                    flag=false;
                    System.out.println("Não existe essa especialidade");
                }
            }
        }while(!opcao.equals("0") && !flag);
        return especialidades;
     }
     public ArrayList formularioAcessos(){
        Scanner in = new Scanner(System.in);
        ArrayList<String> dados = new ArrayList<String>();
        System.out.println("=== Acessos ===");
        System.out.print("Username: ");
        dados.add(in.nextLine());
        System.out.print("Senha: ");
        dados.add(in.nextLine());
        return dados;
     }
     public String formularioSistemaSaude(){
        Scanner in = new Scanner(System.in); 
        System.out.println("=== Sistema Saúde ===");
        System.out.print("Sistema: ");
        return in.nextLine();
     }
     
     public void listarPessoas(String tipo){
        consultorio.dbPessoas.listarPessoas(tipo);
     }
     public void listarPessoas(){
        consultorio.dbPessoas.listarPessoas();
     }
     
     public void listarEspecialidades(){
        consultorio.dbEspecialidades.listarEspecialidades();
     }
     public void listarConsultas(){
        consultorio.dbConsultas.listarConsultas();
     }
     public void listarConsultasMedico(){
        consultorio.dbConsultas.listarConsulta(Integer.valueOf(Pessoa.TIPOMEDICO[0]),Operador.id);
     }
     
     public void pesquisarEspecialidadePorId(String tipo,String grupoPessoas) {
        Scanner in = new Scanner(System.in); 
        int especialidadeId; 
        System.out.print("Id da especialidade a pesquisar: ");
        especialidadeId=in.nextInt();
        if (consultorio.dbEspecialidades.getCodigoEspecialidade(especialidadeId)>0) {
            System.out.println("\nREGISTO ENCONTRADO!\n");
            System.out.println(consultorio.dbEspecialidades.listarEspecialidade(especialidadeId));
        } else
            System.out.println("\nREGISTO NAO ENCONTRADO!\n");
    }
     
     public void pesquisarPessoaPorId(String tipo,String grupoPessoas) {
        Scanner in = new Scanner(System.in); 
        int pessoaId;
        consultorio.dbPessoas.listarNomePessoasComId(tipo);
        System.out.print("Está a pesquisar somente dentro dos "+ grupoPessoas+"s\n" );
        System.out.print("Id do "+grupoPessoas+" a pesquisar: ");
        pessoaId=in.nextInt();
        consultorio.dbPessoas.listarPessoa(pessoaId,tipo);
    }
     
     public void listarMedicosPorEspecialidade() {
        Scanner in = new Scanner(System.in); 
        int idEspecialidade;
        consultorio.dbEspecialidades.listarEspecialidades();
        System.out.print("Está a pesquisar somente dentro dos Médicos\n" );
        System.out.print("Id da especialidade a pesquisar: ");
        idEspecialidade=in.nextInt();
        consultorio.dbPessoas.listarMedicosPorEspecialidade(idEspecialidade);
    }
     
    public void pesquisarPessoaPorId() {
        Scanner in = new Scanner(System.in); 
        int pessoaId;
        System.out.print("Está a pesquisar em todos os registos\n" );
        System.out.print("Id da pessoa a pesquisar: ");
        pessoaId=in.nextInt();
        consultorio.dbPessoas.listarPessoa(pessoaId);
    }
    
     public void pesquisarEspecialidadePorId() {
        Scanner in = new Scanner(System.in); 
        int  especialidadeId;
        System.out.print("Está a pesquisar em todos os registos\n" );
        System.out.print("Id da pesquisa a pesquisar: ");
        especialidadeId=in.nextInt();
        int posicao = consultorio.dbEspecialidades.getEspecialidadeIndex( especialidadeId);
        if ( especialidadeId == consultorio.dbEspecialidades.getListaEspecialidades().get(posicao).getCodigo()) {
            System.out.println("\nREGISTO ENCONTRADO!\n");
            System.out.println(consultorio.dbEspecialidades.getListaEspecialidades().get(posicao).toString());
        } else
            System.out.println("\nREGISTO NAO ENCONTRADO!\n");
    }
     
     public void pesquisarConsulta() {
        Scanner in = new Scanner(System.in);
        String pesquisa,id;
        System.out.print("Está a pesquisar em todos os registos das Consultas\n" );
        System.out.print("Por que campo deseja pesquisar? (1:Médico 2:Utente 3:Especialidade 4:Data ): ");
        id=in.nextLine();
        if(Integer.valueOf(id)<4){
            if(Integer.valueOf(id)==1)
                consultorio.dbPessoas.listarNomePessoasComId(Pessoa.TIPOMEDICO[0]);
            if(Integer.valueOf(id)==2)
                consultorio.dbPessoas.listarNomePessoasComId(Pessoa.TIPOUTENTE[0]);
            if(Integer.valueOf(id)==3)
                consultorio.dbEspecialidades.listarEspecialidades();
            System.out.print("Qual é o ID : ");
            pesquisa=in.nextLine();
            consultorio.dbConsultas.listarConsulta(Integer.valueOf(id),Integer.valueOf(pesquisa));
        }else{
            System.out.print("Qual o dia: ");
            String dia=in.nextLine();
            System.out.print("Qual o mês: ");
            String mes=in.nextLine();
            System.out.print("Qual o ano: ");
            String ano=in.nextLine();
            StringBuilder data = new StringBuilder();
            data.append(dia+"/");
            data.append(mes+"/");
            data.append(ano);
            consultorio.dbConsultas.listarConsultaPorData(String.valueOf(data));
        }
    }
     public void formularioCriarEspecialidade(){
        Scanner in = new Scanner(System.in);
        String nome;
        String descricao;
        System.out.println("introduza o nome da especialidade: ");  
        nome=in.nextLine();
        System.out.println("introduza a descrição da especialidade: ");
        descricao=in.nextLine();
        consultorio.dbEspecialidades.criarEspecialidade(nome, descricao);
   
     }   
     public void apagarPessoaPorId(String tipo,String grupoPessoas) {
        Scanner inInt = new Scanner(System.in); 
        int pessoaId;
        consultorio.dbPessoas.listarNomePessoasComId(tipo);
        System.out.print("Somente consegue pesquisar dentro dos "+ grupoPessoas+"s\n" );
        System.out.print("Id do "+grupoPessoas+" a apagar: ");
        pessoaId=inInt.nextInt();
        consultorio.dbPessoas.apagarPessoa(pessoaId,Integer.valueOf(tipo));
     }   
     public void apagarPessoaPorId() {
        Scanner inInt = new Scanner(System.in); 
        int pessoaId,tipo;
        System.out.print("Id da pessoa a apagar: ");
        pessoaId=inInt.nextInt();
        tipo=consultorio.dbPessoas.getPerfil(pessoaId);
        consultorio.dbPessoas.apagarPessoa(pessoaId,Integer.valueOf(tipo));
     }   
     public void apagarEspecialidadePorId() {
        Scanner inInt = new Scanner(System.in); 
        int especialidadeId;
        System.out.print("Apagar especialidades\n" );
        consultorio.dbEspecialidades.listarEspecialidades();
        System.out.print("Id do especialidade a apagar: ");
        especialidadeId=inInt.nextInt();
        consultorio.dbEspecialidades.apagarEspecialidade(especialidadeId);
            
     }   
     public void apagarConsultaPorId(int pessoaId) {
        Scanner inInt = new Scanner(System.in); 
        int consultaId;
        if(consultorio.dbConsultas.getNumeroConsultas()>0){
        System.out.print("Apagar consulta\n" );
        consultorio.dbConsultas.listarConsulta(Integer.valueOf(Pessoa.TIPOMEDICO[0]),Integer.valueOf(pessoaId));
        System.out.print("Id do consulta a apagar: ");
        consultaId=inInt.nextInt();
        consultorio.dbConsultas.apagarConsulta(consultaId,pessoaId);
        }else{
            System.out.print("Não existem consultas para apagar\n" );
        }
     }   
     public void apagarConsultaPorId() {
        Scanner inInt = new Scanner(System.in); 
        int consultaId;
        if(consultorio.dbConsultas.getNumeroConsultas()>0){
            System.out.print("Apagar consulta\n" );
            consultorio.dbConsultas.listarConsultas();
            System.out.print("Id do consulta a apagar: ");
            consultaId=inInt.nextInt();
            consultorio.dbConsultas.apagarConsulta(consultaId); 
        }else{
            System.out.print("Não existem consultas para apagar\n" );
        }
     }
      
     public void editarEspecialidadePorId() {
        Scanner inInt = new Scanner(System.in); 
        int especialidadeId;
        System.out.print("Editar especialidades\n" );
        consultorio.dbEspecialidades.listarEspecialidades();
        do{
            System.out.print("Id da especialidade a editar (0 para sair): ");
            especialidadeId=inInt.nextInt();
        }while(!consultorio.dbEspecialidades.existeEspecialidade(especialidadeId) || especialidadeId==0);
        
        Scanner in = new Scanner(System.in); 
        String nome,opcao,descricao;
        
        nome=consultorio.dbEspecialidades.getEspecialidadeNome(especialidadeId);
        System.out.println("Nome: "+nome);
        System.out.println("Introduza o novo nome (0 para manter): "); 
        opcao=in.nextLine();
        if(!opcao.equals("0"))
                    nome=opcao;
        
        descricao=consultorio.dbEspecialidades.getEspecialidadeNome(especialidadeId);
        System.out.println("Descrição: "+descricao);
        System.out.println("Introduza a nova descricao (0 para manter): "); 
        opcao=in.nextLine();
        if(!opcao.equals("0"))
                    descricao=opcao;
        consultorio.dbEspecialidades.actualizarEspecialidade(especialidadeId,nome,descricao);
     }
     //Para quando venho do menu Consultório e posso editar qualquer pessoa, como não sei o tipo tenho de descobrir via pessoa ID
     //Aproveito e uso a sobreposição/sobecarga de nomes :)
     public void editarPessoaPorId() {
        Scanner inInt = new Scanner(System.in); 
        Scanner in = new Scanner(System.in); 
        int pessoaId;
        ArrayList<Morada> moradas= new  ArrayList<Morada>();
        ArrayList<Telefone> telefones= new  ArrayList<Telefone>();
        ArrayList<Especialidade> especialidades= new  ArrayList<Especialidade>();
        consultorio.dbPessoas.listarNomePessoasComId();
        System.out.print("Id da pessoa a editar: ");
        pessoaId=inInt.nextInt();
        String tipo=String.valueOf(consultorio.dbPessoas.getPerfil(pessoaId));
        if (consultorio.dbPessoas.existePessoa(pessoaId) && consultorio.dbPessoas.pessoaTemPerfil(pessoaId, tipo)) {
                String opcao="";
                System.out.println("\nREGISTO ENCONTRADO!\n");
                
                String nome =consultorio.dbPessoas.getNomeProprio(pessoaId);
                System.out.print("Nome Próprio: "+ nome +"\n Novo Nome Próprio (0 para manter): ");
                opcao=in.nextLine();
                if(!opcao.equals("0"))
                    nome=opcao;
                
                String apelido=consultorio.dbPessoas.getApelido(pessoaId);
                System.out.print("Apelido: "+apelido+"\n Novo Apelido (0 para manter): ");
                opcao=in.nextLine();
                if(!opcao.equals("0"))
                    apelido=opcao;
                
                char genero=consultorio.dbPessoas.getGenero(pessoaId);
                System.out.print("Genero: "+genero+"\n Novo Género  (0 para manter): ");
                opcao=in.nextLine();
                if(!opcao.equals("0")){
                        String texto=opcao;
                        genero=texto.charAt(0);
                }
                
                String bi=consultorio.dbPessoas.getBi(pessoaId);
                System.out.print("BI: "+bi+"\n Novo BI  (0 para manter): ");
                opcao=in.nextLine();
                if(!opcao.equals("0"))
                    bi=opcao;
                
                String nif = consultorio.dbPessoas.getNif(pessoaId);
                System.out.print("NIF: "+nif+"\n Novo NIF (0 para manter): ");
                opcao=in.nextLine();
                if(!opcao.equals("0"))
                    nif=opcao;
                
                String nss= consultorio.dbPessoas.getNss(pessoaId);
                System.out.print("NSS: "+nss+"\n Novo NSS  (0 para manter): ");
                opcao=in.nextLine();
                if(!opcao.equals("0"))
                    nss=opcao;
                
                //Se tiver moradas
                int tamanhoMoradas=consultorio.dbPessoas.getNumeroMoradas(pessoaId);
                if(tamanhoMoradas>0){

                    for(int i=0;i<tamanhoMoradas;i++){
                        int porta;
                        String rua,codigoPostal,localidade;
                        
                        porta=consultorio.dbPessoas.getPorta(pessoaId,i);
                        System.out.print("Porta: "+porta+"\n Nova Porta  (0 para manter): ");
                        opcao=in.nextLine();
                        if(!opcao.equals("0"))
                            porta=Integer.valueOf(opcao);
                        
                        rua=consultorio.dbPessoas.getRua(pessoaId,i);
                        System.out.print("Rua: "+rua+"\n Nova Rua  (0 para manter): ");
                        opcao=in.nextLine();
                        if(!opcao.equals("0"))
                            rua=opcao;
                        codigoPostal=consultorio.dbPessoas.getCodigoPostal(pessoaId,i);
                        System.out.print("Código Portal: "+codigoPostal+"\n Novo Código Portal  (0 para manter): ");
                        opcao=in.nextLine();
                        if(!opcao.equals("0"))
                            codigoPostal=opcao;
                        
                        localidade=consultorio.dbPessoas.getLocalidade(pessoaId,i);
                        System.out.print("Localidade: "+localidade+"\n Nova Localidade  (0 para manter): ");
                        opcao=in.nextLine();
                            if(!opcao.equals("0"))
                                localidade=opcao;
                        
                        Morada morada = new Morada(rua,porta,codigoPostal,localidade);
                        moradas.add(morada);
                        
                    }
                }
                
                //Se tiver telefones
                int tamanhoTelefones=consultorio.dbPessoas.getNumeroTelefones(pessoaId);
                if(tamanhoTelefones>0){
                    for(int i=0;i<tamanhoTelefones;i++){
                        
                        short indicativo=consultorio.dbPessoas.getIndicativoPais(pessoaId,i);
                        System.out.print("Indicativo País: "+indicativo+"\n Novo Indicativo  (0 para manter): ");
                        opcao=in.nextLine();
                        if(!opcao.equals("0"))
                            indicativo=Short.valueOf(opcao);
                        
                        short distrito=consultorio.dbPessoas.getIndicativoDistrito(pessoaId,i);
                        System.out.print("Indicativo Distrito: "+distrito+"\n Novo Indicativo  (0 para manter): ");
                        opcao=in.nextLine();
                        if(!opcao.equals("0"))
                            distrito=Short.valueOf(opcao);
                        
                        int numero=consultorio.dbPessoas.getNumeroTelefone(pessoaId,i);
                        System.out.print("Número: "+numero+"\n Novo Número  (0 para manter): ");
                        opcao=in.nextLine();
                        if(!opcao.equals("0"))
                            numero=Integer.valueOf(opcao);
                        Telefone telefone=new Telefone(indicativo,distrito,numero);
                        telefones.add(telefone);
                        
                    }
                }

                if(tipo.equals(Pessoa.TIPOMEDICO[0])){
                    
                    String numeroCedula=consultorio.dbPessoas.getNumeroCedula(pessoaId);
                    System.out.print("Número Cédula: "+ numeroCedula+"\n Novo Número Cédula (0 para manter): ");
                    opcao=in.nextLine();
                if(!opcao.equals("0"))
                    numeroCedula=opcao;

                int tamanhoEspecialidades=consultorio.dbPessoas.getNumeroEspecialidades(pessoaId);
                if(tamanhoEspecialidades>0){
                    boolean flag=false;
                    for(int i=0;i<tamanhoEspecialidades;i++){
                        do{
                            int especialidade=consultorio.dbPessoas.getCodigoEspecialidade(pessoaId, i);
                            consultorio.dbEspecialidades.listarEspecialidades();
                            System.out.print("Especialidade: "+ especialidade +"\n ID da Nova Especialidade (0 para manter): ");
                            opcao=in.nextLine();
                                if(consultorio.dbEspecialidades.existeEspecialidade(Integer.valueOf(opcao))){
                                    especialidade=Integer.valueOf(opcao);
                                    flag=true;
                                }else{
                                    System.out.println("Escolheu um ID de especialidade inválido.");
                                    flag=false;
                                }
                                if(flag)
                                especialidades.add(consultorio.dbEspecialidades.getEspecialidade(especialidade));
                        }while(!opcao.equals("0") && !flag);
                    }
                }
                String username=consultorio.dbPessoas.getUsername(pessoaId);
                System.out.print("Utilizador: "+ username+"\n Novo Utilizador (0 para manter): ");
                    opcao=in.nextLine();
                if(!opcao.equals("0"))
                    username=opcao;
                String password=consultorio.dbPessoas.getPassword(pessoaId);
                System.out.print("Senha: "+ password+"\n Nova Senha (0 para manter): ");
                    opcao=in.nextLine();
                if(!opcao.equals("0"))
                    password=opcao;
                consultorio.dbPessoas.actualizarMedico(pessoaId, numeroCedula, especialidades, username, password, nome, apelido, genero, telefones, moradas, bi, nif, nss);
            }else if(tipo.equals(Pessoa.TIPOADMINISTRATIVO[0])){
                
                String username=consultorio.dbPessoas.getUsername(pessoaId);
                System.out.print("Utilizador: "+ username+"\n Novo Utilizador (0 para manter): ");
                    opcao=in.nextLine();
                if(!opcao.equals("0"))
                    username=opcao;
                String password=consultorio.dbPessoas.getPassword(pessoaId);
                System.out.print("Senha: "+ password+"\n Nova Senha (0 para manter): ");
                    opcao=in.nextLine();
                if(!opcao.equals("0"))
                    password=opcao;
                consultorio.dbPessoas.actualizarAdministrativo(pessoaId,username,password, nome, apelido, genero, telefones, moradas, bi, nif, nss);
            }else{
                String sistemaSaude=consultorio.dbPessoas.getSistemaSaude(pessoaId);
                System.out.print("Sistema de Saúde: "+ sistemaSaude +"\n Novo Sistema de Saúde (0 para manter): ");
                    opcao=in.nextLine();
                if(!opcao.equals("0"))
                    sistemaSaude=opcao;
                consultorio.dbPessoas.actualizarUtente(pessoaId, sistemaSaude, nome, apelido, genero, telefones, moradas, bi, nif, nss);
            }
            
        } else
            System.out.println("\nREGISTO NAO ENCONTRADO!\n");
    }
     
     //Para quando venho dos diferentes menus (Médicos, Administrativos ou Utentes) e sei o tipo de pessoa
     public void editarPessoaPorId(String tipo,String grupoPessoas) {
        Scanner inInt = new Scanner(System.in); 
        Scanner in = new Scanner(System.in); 
        int pessoaId;
        
        ArrayList<Morada> moradas= new  ArrayList<Morada>();
        ArrayList<Telefone> telefones= new  ArrayList<Telefone>();
        ArrayList<Especialidade> especialidades= new  ArrayList<Especialidade>();
        consultorio.dbPessoas.listarNomePessoasComId(tipo);
        System.out.print("Somente consegue pesquisar dentro dos "+ grupoPessoas+"s\n" );
        System.out.print("Id do "+grupoPessoas+" a editar: ");
        pessoaId=inInt.nextInt();
    
        if (consultorio.dbPessoas.existePessoa(pessoaId) && consultorio.dbPessoas.pessoaTemPerfil(pessoaId, tipo)) {
                String opcao="";
                System.out.println("\nREGISTO ENCONTRADO!\n");
                
                String nome =consultorio.dbPessoas.getNomeProprio(pessoaId);
                System.out.print("Nome Próprio: "+ nome +"\n Novo Nome Próprio (0 para manter): ");
                opcao=in.nextLine();
                if(!opcao.equals("0"))
                    nome=opcao;
                
                String apelido=consultorio.dbPessoas.getApelido(pessoaId);
                System.out.print("Apelido: "+apelido+"\n Novo Apelido (0 para manter): ");
                opcao=in.nextLine();
                if(!opcao.equals("0"))
                    apelido=opcao;
                
                char genero=consultorio.dbPessoas.getGenero(pessoaId);
                System.out.print("Genero: "+genero+"\n Novo Género  (0 para manter): ");
                opcao=in.nextLine();
                if(!opcao.equals("0")){
                        String texto=opcao;
                        genero=texto.charAt(0);
                }
                
                String bi=consultorio.dbPessoas.getBi(pessoaId);
                System.out.print("BI: "+bi+"\n Novo BI  (0 para manter): ");
                opcao=in.nextLine();
                if(!opcao.equals("0"))
                    bi=opcao;
                
                String nif = consultorio.dbPessoas.getNif(pessoaId);
                System.out.print("NIF: "+nif+"\n Novo NIF (0 para manter): ");
                opcao=in.nextLine();
                if(!opcao.equals("0"))
                    nif=opcao;
                
                String nss= consultorio.dbPessoas.getNss(pessoaId);
                System.out.print("NSS: "+nss+"\n Novo NSS  (0 para manter): ");
                opcao=in.nextLine();
                if(!opcao.equals("0"))
                    nss=opcao;
                
                //Se tiver moradas
                int tamanhoMoradas=consultorio.dbPessoas.getNumeroMoradas(pessoaId);
                if(tamanhoMoradas>0){

                    for(int i=0;i<tamanhoMoradas;i++){
                        int porta;
                        String rua,codigoPostal,localidade;
                        
                        porta=consultorio.dbPessoas.getPorta(pessoaId,i);
                        System.out.print("Porta: "+porta+"\n Nova Porta  (0 para manter): ");
                        opcao=in.nextLine();
                        if(!opcao.equals("0"))
                            porta=Integer.valueOf(opcao);
                        
                        rua=consultorio.dbPessoas.getRua(pessoaId,i);
                        System.out.print("Rua: "+rua+"\n Nova Rua  (0 para manter): ");
                        opcao=in.nextLine();
                        if(!opcao.equals("0"))
                            rua=opcao;
                        codigoPostal=consultorio.dbPessoas.getCodigoPostal(pessoaId,i);
                        System.out.print("Código Portal: "+codigoPostal+"\n Novo Código Portal  (0 para manter): ");
                        opcao=in.nextLine();
                        if(!opcao.equals("0"))
                            codigoPostal=opcao;
                        
                        localidade=consultorio.dbPessoas.getLocalidade(pessoaId,i);
                        System.out.print("Localidade: "+localidade+"\n Nova Localidade  (0 para manter): ");
                        opcao=in.nextLine();
                            if(!opcao.equals("0"))
                                localidade=opcao;
                        
                        Morada morada = new Morada(rua,porta,codigoPostal,localidade);
                        moradas.add(morada);
                        
                    }
                }
                
                //Se tiver telefones
                int tamanhoTelefones=consultorio.dbPessoas.getNumeroTelefones(pessoaId);
                if(tamanhoTelefones>0){
                    for(int i=0;i<tamanhoTelefones;i++){
                        
                        short indicativo=consultorio.dbPessoas.getIndicativoPais(pessoaId,i);
                        System.out.print("Indicativo País: "+indicativo+"\n Novo Indicativo  (0 para manter): ");
                        opcao=in.nextLine();
                        if(!opcao.equals("0"))
                            indicativo=Short.valueOf(opcao);
                        
                        short distrito=consultorio.dbPessoas.getIndicativoDistrito(pessoaId,i);
                        System.out.print("Indicativo Distrito: "+distrito+"\n Novo Indicativo  (0 para manter): ");
                        opcao=in.nextLine();
                        if(!opcao.equals("0"))
                            distrito=Short.valueOf(opcao);
                        
                        int numero=consultorio.dbPessoas.getNumeroTelefone(pessoaId,i);
                        System.out.print("Número: "+numero+"\n Novo Número  (0 para manter): ");
                        opcao=in.nextLine();
                        if(!opcao.equals("0"))
                            numero=Integer.valueOf(opcao);
                        Telefone telefone=new Telefone(indicativo,distrito,numero);
                        telefones.add(telefone);
                        
                    }
                }

                if(tipo.equals(Pessoa.TIPOMEDICO[0])){
                    
                    String numeroCedula=consultorio.dbPessoas.getNumeroCedula(pessoaId);
                    System.out.print("Número Cédula: "+ numeroCedula+"\n Novo Número Cédula (0 para manter): ");
                    opcao=in.nextLine();
                if(!opcao.equals("0"))
                    numeroCedula=opcao;

                int tamanhoEspecialidades=consultorio.dbPessoas.getNumeroEspecialidades(pessoaId);
                if(tamanhoEspecialidades>0){
                    boolean flag=false;
                    for(int i=0;i<tamanhoEspecialidades;i++){
                        do{
                            int especialidade=consultorio.dbPessoas.getCodigoEspecialidade(pessoaId, i);
                            consultorio.dbEspecialidades.listarEspecialidades();
                            System.out.print("Especialidade: "+ especialidade +"\n ID da Nova Especialidade (0 para manter): ");
                            opcao=in.nextLine();
                                if(consultorio.dbEspecialidades.existeEspecialidade(Integer.valueOf(opcao))){
                                    especialidade=Integer.valueOf(opcao);
                                    flag=true;
                                }else{
                                    System.out.println("Escolheu um ID de especialidade inválido.");
                                    flag=false;
                                }
                                if(flag)
                                especialidades.add(consultorio.dbEspecialidades.getEspecialidade(especialidade));
                        }while(!opcao.equals("0") && !flag);
                    }
                }
                
                String username=consultorio.dbPessoas.getUsername(pessoaId);
                System.out.print("Utilizador: "+ username+"\n Novo Utilizador (0 para manter): ");
                opcao=in.nextLine();
                if(!opcao.equals("0"))
                    username=opcao;
                String password=consultorio.dbPessoas.getPassword(pessoaId);
                System.out.print("Senha: "+ password+"\n Nova Senha (0 para manter): ");
                opcao=in.nextLine();
                if(!opcao.equals("0"))
                    password=opcao;
                
                consultorio.dbPessoas.actualizarMedico(pessoaId, numeroCedula,especialidades, username,password, nome, apelido, genero, telefones, moradas, bi, nif, nss);
            }else if(tipo.equals(Pessoa.TIPOADMINISTRATIVO[0])){
                String username=consultorio.dbPessoas.getUsername(pessoaId);
                System.out.print("Utilizador: "+ username+"\n Novo Utilizador (0 para manter): ");
                    opcao=in.nextLine();
                if(!opcao.equals("0"))
                    username=opcao;
                String password=consultorio.dbPessoas.getPassword(pessoaId);
                System.out.print("Senha: "+ password+"\n Nova Senha (0 para manter): ");
                    opcao=in.nextLine();
                if(!opcao.equals("0"))
                    password=opcao;
                consultorio.dbPessoas.actualizarAdministrativo(pessoaId,username,password, nome, apelido, genero, telefones, moradas, bi, nif, nss);
            }else{
                String sistemaSaude=consultorio.dbPessoas.getSistemaSaude(pessoaId);
                System.out.print("Sistema de Saúde: "+ sistemaSaude +"\n Novo Sistema de Saúde (0 para manter): ");
                    opcao=in.nextLine();
                if(!opcao.equals("0"))
                    sistemaSaude=opcao;
                consultorio.dbPessoas.actualizarUtente(pessoaId, sistemaSaude, nome, apelido, genero, telefones, moradas, bi, nif, nss);
            }
            
        } else
            System.out.println("\nREGISTO NAO ENCONTRADO!\n");
    }
    public ArrayList<String> editarUserPassPessoaSistema(int pessoaId){
        String opcao;
        Scanner in = new Scanner(System.in); 
        ArrayList<String> acessos= new ArrayList<String>();
        String username=consultorio.dbPessoas.getUsername(pessoaId);
        System.out.print("Utilizador: "+ username+"\n Novo Utilizador (0 para manter): ");
            opcao=in.nextLine();
        if(!opcao.equals("0"))
            acessos.add(opcao);
        String password=consultorio.dbPessoas.getPassword(pessoaId);
        System.out.print("Senha: "+ password+"\n Nova Senha (0 para manter): ");
            opcao=in.nextLine();
        if(!opcao.equals("0"))
            acessos.add(opcao);
       
        return acessos;
    }
     public void menuCreditos (){
         System.out.println("Este programa foi realizado no âmbito da cadeira de LP2 da Universidade Lusófona");
         System.out.println("Gostariamos de agradecer a algumas pessoas:");
         System.out.println("\tAlexandre Pereira - Professor da teórica com excelentes conhecimentos;");
         System.out.println("\tNelson Morais - Professor da prática que nos ajudou a compreender o Java em Object Oriented;");
         System.out.println("\tPedro Veloso - Sempre pronto a responder às nossas perguntas, és o MAIOR;");
         System.out.println("\tPhineas e Ferb - Por serem os melhores desenhos animados do mundo.");
     
     }
}